Data compression occurs in a number of contexts. It is very commonly used in communications and computer networking to store, transmit, and reproduce information efficiently. It finds particular application in the encoding of images, audio and video. Video presents a significant challenge to data compression because of the large amount of data required for each video frame and the speed with which encoding and decoding often needs to occur. The current state-of-the-art for video encoding is the ITU-T H.264/AVC video coding standard. It defines a number of different profiles for different applications, including the Main profile, Baseline profile and others. A next-generation video encoding standard is currently under development through a joint initiative of MPEG-ITU termed High Efficiency Video Coding (HEVC/H.265). The initiative may eventually result in a video-coding standard that will form part of a suite of standards identified as MPEG-H.
There are a number of standards for encoding/decoding images and videos, including H.264, that use block-based coding processes. In these processes, the image or frame is divided into blocks, typically 4×4 or 8×8, and the blocks are spectrally transformed into coefficients, quantized, and entropy encoded. In many cases, the data being transformed is not the actual pixel data, but is residual data following a prediction operation. Predictions can be intra-frame, i.e. block-to-block within the frame/image, or inter-frame, i.e. between frames (also called motion prediction). It is expected that HEVC/H.265 will also have these features.
Motion prediction involves search for and selecting a prediction block from a previously decoded reference picture or frame. This prediction block is specified to the decoder by way of a motion vector. Rather than explicitly encoding the motion vector, most motion vectors are specified as motion vector differences relative to a predicted motion vector. In many implementations, the motion vector difference is encoded as two elements: a horizontal offset and a vertical offset. Each element may be preceded by a non-zero flag. If the non-zero flag indicates the offset is zero, no further data regarding that element need be encoded. If non-zero, then the magnitude of the element/offset is encoded followed by a sign bit indicating whether the offset is positive or negative.
Similar reference numerals may have been used in different figures to denote similar components.